﻿'''
题目描述
智能手机方便了我们生活的同时，也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间，
在正确的时间做正确的事。
它的大概原理是这样的：
1.	在一天24小时内，可以注册每个App的允许使用时段
2.	一个时间段只能使用一个App
3.	App有优先级，数值越高，优先级越高。注册使用时段时，如果高优先级的App时间和低优先级的时段有冲突，则系统会自动注销
低优先级的时段，如果App的优先级相同，则后添加的App不能注册。
请编程实现，根据输入数据注册App，并根据输入的时间点，返回时间点使用的App名称，如果该时间点没有注册任何App，请返回
字符串“NA”。
输入描述
第一行表示注册的App数量 N（N ≤ 100）
第二部分包括 N 行，每行表示一条App注册数据
最后一行输入一个时间点，程序即返回该时间点使用的App
2
App1 1 09:00 10:00
App2 2 11:00 11:30
09:30
数据说明如下：
1.	N行注册数据以空格分隔，四项数依次表示：App名称、优先级、起始时间、结束时间
2.	优先级1~5，数字越大，优先级越高
3.	时间格式 HH:MM，小时和分钟都是两位，不足两位前面补0
4.	起始时间需小于结束时间，否则注册不上
5.	注册信息中的时间段包含起始时间点，不包含结束时间点
输出描述
输出一个字符串，表示App名称，或NA表示空闲时间
示例1
输入
1
App1 1 09:00 10:00
09:30
输出
App1
说明
App1注册在9点到10点间，9点半可用的应用名是App1
示例2
输入
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
输出
App2
说明
APP1和App2的时段有冲突，App2优先级高，注册App2之后，App1自动注销，因此输出App2。
示例3
输入
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50
输出
NA

'''
#输入描述：
#第一行表示注册的App数量 N（N ≤ 100）
#第二部分包括 N 行，每行表示一条App注册数据
#最后一行输入一个时间点，程序即返回该时间点使用的App
#输出描述：
#输出一个字符串，表示App名称，或NA表示空闲时间
#示例：
'''
1
App1 1 09:00 10:00
09:30
'''
#定义app类用于存储app信息
class App:
    def __init__(self,name,priority,start_time,end_time):
        self.name = name
        self.priority = priority
        self.start_time = start_time
        self.end_time = end_time
#定义时间转换方法，将HH:MM转换为分钟数
def convert_time(time_str):
    hour,minute = map(int,time_str.split(':'))
    return hour * 60 + minute

def test():
    #读取第一行输入，注册app数量n
    n = int(input())
    #循环读取n行app信息并存储
    apps = []
    for _ in range(n):
        app_name,app_priority,app_start_time,app_end_time = input().split()
        app_priority = int(app_priority)
        app_start_time = convert_time(app_start_time)
        app_end_time = convert_time(app_end_time)
        apps.append(App(app_name,app_priority,app_start_time,app_end_time))
    #读入app注册时间，并转换为分钟数
    query_time = convert_time(input())
    app_at_time = 'NA'
    #遍历app列表，注册app
    registered_apps = []
    
    for app in apps:
        #如果要注册app起始时间不小于结束时间，不注册
        if app.start_time >= app.end_time:
            continue

        #需加入判断冲突时，优先级相同或小于不予注册
        #遍历已注册app列表，检查时间冲突，从后往前遍历，为什么？
        flag = True     #判断是否要注册当前app
        for i in range(len(registered_apps) - 1, -1, -1):           
            #检查时间是否冲突
            if max(app.start_time,registered_apps[i].start_time) < min(app.end_time,registered_apps[i].end_time):
                #检查优先级,大于：注销已注册的，小于则不予注册
                if app.priority > registered_apps[i].priority:
                    registered_apps.pop(i)
                else:
                    flag =False
                    break
        #注册当前app
        if flag:
            registered_apps.append(app)
    #用查询时间遍历已注册app并输出结果
    for app in registered_apps:
        if query_time >= app.start_time and query_time < app.end_time:
            app_at_time = app.name
            break   #找到跳出循环
    #输出结果
    print(app_at_time)
if __name__ == '__main__':
    i = 0
    while i< 3:
        test()
        i += 1
    
    